//
//  SettingItemViewController.swift
//  Lease_IOS
//
//  Created by Mr.wang on 2019/4/29.
//  Copyright © 2019 Mr.wang. All rights reserved.
//

import UIKit
import RxSwift
import RxDataSources
import RxCocoa

class SettingItemViewController: BaseUIViewController {
    
    let tableView = UITableView(frame:CGRect.zero, style: .grouped)
    let dataArray = BehaviorSubject<[TableViewSection]>.init(value: [])
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.separatorStyle = .none
        tableView.setHeaderHeight(5)
        tableView.register(TableViewItemCell.self)
        self.view.addSubview(tableView)
        tableView.snp.makeConstraints { (make) in
            make.left.top.bottom.right.equalTo(0)
        }
        
        let dataSource = RxTableViewSectionedReloadDataSource<TableViewSection>(configureCell : {(dataSource, tableView, indexPath, item) -> UITableViewCell in
            let cell = tableView.dequeueReusableCell(TableViewItemCell.self)
            cell.update(item)
            return cell
        },titleForHeaderInSection: { dataSource, section in
            return dataSource.sectionModels[section].header
        },titleForFooterInSection: { dataSource, section in
            return dataSource.sectionModels[section].footer
        })
        
        tableView.rx.setDelegate(self)
            .disposed(by: rx.disposeBag)
        
        dataArray.asObservable()
            .bind(to: tableView.rx.items(dataSource: dataSource))
            .disposed(by: rx.disposeBag)
        
        tableView.rx.modelSelected(TableViewItem.self)
            .subscribe(onNext: { [unowned self] (item) in
                if let selectedRow = self.tableView.indexPathForSelectedRow {
                    self.tableView.deselectRow(at: selectedRow, animated: true)
                }
                item.handleClick()
            }).disposed(by: rx.disposeBag)
        
        dataArray.onNext(sectionArray())
    }
    
    func sectionArray() -> [TableViewSection] {
        return []
    }
    
    override func navigationBarStyle() -> NavigationBarStyle {
        return super.navigationBarStyle()
    }
}

extension SettingItemViewController : UITableViewDelegate {
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 10
    }
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 0.1
    }
    
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return nil
    }
    
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return nil
    }
}
